import InterfaceProxy from 'src/utils/mider'
import { defaultOptions } from './_options'

const defaultUserActionOptions = {
  method: 'post'
}

// 用户日志
export interface UserLogSchema {
  // 基础信息
  userId?: string, // 日志用户 ID
  level: number, // 日志等级
  // 1. 实时/高优先级
  // 2. 实时/低优先级
  // 3. 非实时/高优先级
  // 4. 非实时/低优先级

  // 行为发生位置
  location?: {
    url: string, // 页面 URL
    module: string, // 当前用户模块
  },
  agent?: {
    ip: string, // 客户端 IP
    userAgent: string, // 客户端信息 - 浏览器
    platform: string, // 客户端平台 - 硬件与操作系统
  },

  // 行为信息
  type: number, // 用户行为类型 eg. 'toolPage' | 'timeline'
  // 用户行为类型
  // 1. view: 各种浏览行为，例如页面链接跳转、按钮点击等
  // 2. trigger-event: 触发型事件，例如各种埋点
  action: string, // 用户行为操作 eg. 'enter' | 'click' | 'search' | 'exit'
  value: {
    // 搜索
    keywords?: string,
    // 元素点击 @click/elem
    el?: string,
    component?: string,
    // 工具操作 @tool/like
    id?: string,
  },
  // 数据信息
  createdAt?: Date, // 创建时间
  updatedAt?: Date, // 更新时间
}

/**
 * 用户
 * @namespace iUser
 */

/** @lends iUser# */
const interfaceOpt = {
  login: {
    url: '/v1/user-api/actions/login',
    method: 'post',
    successHandler (res: { code: number, data: unknown, msg: string }) {
      if (res.code === 8) {
        return {
          success: true,
          data: null
        }
      }
      return {
        success: res.code === 0,
        data: res.data,
        msg: res.msg
      }
    }
  },
  getCurrentUser: {
    url: '/v1/user-api/me',
    method: 'get',
    merge: true
  },
  logout: {
    url: '/v1/user-api/logout',
    method: 'get'
  },
  registry: { url: '/v1/user-api/actions/registry' },
  changePassword: { url: '/v1/user-api/actions/changePassword' },
  postActivity: { url: '/v1/user-api/log' },
  saveStorage: { url: '/v1/user-api/actions/saveStorage' },
  loadStorage: { url: '/v1/user-api/actions/loadStorage' },
  feedback: { url: '/v1/user-api/feedback' },
  createMsgRobot: { url: '/v1/user-api/actions/createMsgRobot' },
  deleteMsgRobot: { url: '/v1/user-api/actions/deleteMsgRobot' },
  updateMsgRobot: { url: '/v1/user-api/actions/updateMsgRobot' },
  updateWorkbench: { url: '/v1/user-api/actions/updateWorkbenches' },
  createSharePanel: { url: '/v1/user-api/actions/createSharePanel' },
  updateSharePanel: { url: '/v1/user-api/actions/createSharePanel' },
  getSharePanel: {
    url: '/p/v1/share-api/panel/:id',
    pathParams: {
      id: String
    },
    method: 'get'
  },
  findAllMsgRobot: {
    url: '/v1/user-api/actions/findAllMsgRobot',
    data: {
      query: {
        group: String
      }
    }
  }
}

/** @mixes iUser */
const iUser = new InterfaceProxy(interfaceOpt,
  [defaultOptions, defaultUserActionOptions]
)

export default iUser
